import { ArgumentsHost, ExceptionFilter, Catch, HttpException, Inject } from '@nestjs/common'
import { Response } from 'express'
/**
 * 自定义异常过滤器
 */
@Catch()
export class CustomExceptionFilter implements ExceptionFilter {
  constructor(@Inject('prefix_provide_token') private prefix: string) {
  }
  /**
   * 自定义异常过滤器 用来捕获异常
   * @param exception 异常对象
   * @param host 用于获取 HTTP 上下文
   */
  catch(exception: any, host: ArgumentsHost) {
    console.log('依赖注入的值 this.prefix: ', this.prefix,)
    const ctx = host.switchToHttp()
    const request = ctx.getRequest<Request>() // 请求对象
    const response = ctx.getResponse<Response>() // 响应对象
    const statusCode = exception.getStatus ? exception.getStatus() : 501 // 获取错误对象的状态码
    response
    .status(statusCode) // 使用错误对象的状态码来设置响应的状态码
    .json({
      statusCode: statusCode, // 状态码
      message: exception.getResponse ? exception.getResponse() : exception.message, // 获取错误对象的响应体
      timestamp: new Date().toLocaleString(), // 时间戳
      path: request.url, // HTTP 请求的路径
      method: request.method, // 请求方式
    })
  }
}
